package com.svs.generator.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import com.svs.framework.base.service.CrudService;
import com.svs.generator.domain.BizColumn;
import com.svs.generator.domain.BizTable;
import com.svs.generator.helper.BizTableHelper;
import com.svs.generator.mapper.master.BizTableDao;

/**
 * 业务生成 服务层实现
 * 
 * @author 杜建桥
 * @date 2019-01-31
 */
@Service
public class BizTableService extends CrudService<BizTableDao, BizTable> {

	
	@Autowired
	JdbcTemplate jdbcTemplate ;
	
	
	public void sync(BizTable table, List<BizColumn> columnList) {
		/**
    	 * 表不存在 创建
    	 */
    	if(BizTableHelper.NOT_CREATE.equals(table.getState()) || BizTableHelper.NOT_SYNC.equals(table.getState()) ) {
    		StringBuffer sql = new StringBuffer() ;
    		String dropSql = "drop table if exists " + table.getName() + "; ";
    		sql.append("create table ").append(table.getName()).append(" (") ;
    		int len = null != columnList ?columnList.size() : 0 ;
    		String colName = "";
    		String jdbcType = "";
    		String comments = "";
    		String isPk = "1";
    		String idColumn = "";
    		for(int i=0 ;i<len;i++) {
    			BizColumn column = columnList.get(i);
    			colName = column.getName();
    			jdbcType = column.getJdbcType();
    			comments = column.getComments();
    			sql.append("`").append(colName).append("`  ").append(jdbcType).append("  ");
//    			if (StringUtils.isEmpty(column.getIsNull())) {
//    				sql.append(" NULL ");
//    			} else {
//    				sql.append(" NOT NULL ");
//    			}
    			if (isPk.equals(column.getIsPk())) {
    				idColumn = colName;
    				sql.append(" AUTO_INCREMENT ");
    			}
    			sql.append(" COMMENT '").append(comments).append("' ,\n");
    		}
    		if (StringUtils.isEmpty(idColumn)) {
    			//没有主键
    			return ;
    		}
    		sql.append(" PRIMARY KEY (").append(idColumn).append(") \n");
    		sql.append(") ");
    		sql.append("ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='") ;
    		sql.append(table.getComments()).append("' ;") ;
    		
    		System.out.println(sql.toString());
    		
    		jdbcTemplate.execute(dropSql) ;
    		jdbcTemplate.execute(sql.toString()) ;
    	} else {
    		//表存在 ，更新
    		String sql = "alter table "+table.getName()+" comment '"+ table.getComments() +"' ;"  ;
    		jdbcTemplate.execute(sql) ;
    		int len = null != columnList ?columnList.size() : 0 ;
    		for(int i=0 ;i<len;i++) {
    			BizColumn col = columnList.get(i) ;
    			String sql_col = "" ;
    			if(BizTableHelper.ID_CATA_INCREMENT.equals(table.getIdCata()) && BizTableHelper.IS_PK.equals(col.getIsPk())) {
    				sql_col = "alter table "+table.getName()+" modify column "+col.getName()+" "+col.getJdbcType()+" AUTO_INCREMENT comment '"+col.getComments()+"' " ;
    			} else {
    				sql_col = "alter table "+table.getName()+" modify column "+col.getName()+" "+col.getJdbcType()+" comment '"+col.getComments()+"' " ;
    			}
    			
    			jdbcTemplate.execute(sql_col) ;
    		}
    	}
    	table.setState(BizTableHelper.SYNCED);
    	update(table) ;
		
	}

}
